package com.cuit.service;

import com.cloopen.rest.sdk.CCPRestSmsSDK;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;

/**
 * @author chishuiLi     Email:1192537447@qq.com
 * @Description
 */
@Service
public class SMSService {
    //生产环境请求地址：app.cloopen.com
    @Value("${sms.serverIp}")
    String serverIp;

    //请求端口
    @Value("${sms.serverPort}")
    String serverPort;

    //主账号,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN
    @Value("${sms.accountSId}")
    String accountSId;

    @Value("${sms.accountToken}")
    String accountToken;


    //请使用管理控制台中已创建应用的APPID
    @Value("${sms.appId}")
    String appId;

    //使用redis存储验证码
    @Resource
    RedisTemplate<String,String> rt;


    public String sms(String phone) {
        HashMap<String, Object> result = null;
        CCPRestSmsSDK restAPI = new CCPRestSmsSDK();
        // 初始化服务器地址和端口，生产环境配置成app.cloopen.com，端口是8883.
        restAPI.init(serverIp, serverPort);
        // 初始化主账号名称和主账号令牌，登陆云通讯网站后，可在控制首页中看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN。
        restAPI.setAccount(accountSId, accountToken);
        // 请使用管理控制台中已创建应用的APPID。
        restAPI.setAppId(appId);
        String code = RandomStringUtils.randomNumeric(6);

        //设置需要发送的手机号和发送的验证码及过期时间
        result = restAPI.sendTemplateSMS(phone, "1", new String[]{code, "10"});
        if ("000000".equals(result.get("statusCode"))) {

            //redis存储，过期时间设为10
            ValueOperations<String, String> forValue = rt.opsForValue();
            forValue.set(phone,code);
            //设置过期时间
            rt.expire(phone,10*60*1000, TimeUnit.MILLISECONDS);

            return code;
        } else {
            //异常返回输出错误码和错误信息
            String s = "错误码=" + result.get("statusCode") + " 错误信息= " + result.get("statusMsg");
            return s;
        }
    }

    /**
    * @Description 检验手机号和验证码是否匹配
    * @author chishuiLi Email:1192537447@qq.com
    * @version
    * @date 2022/8/11 10:16
    * @Param
    * @return 匹配返回true，否则返回false
    */
    public boolean phoneCodeIsSuccess(String phone,String code){
        ValueOperations<String, String> forValue = rt.opsForValue();
        String right_code = forValue.get(phone);
        if(!code.equals(right_code)){
            return false;
        }
        return true;
    }


}
